package com.itheima.wisdomnext.controller;

import com.itheima.wisdomnext.entity.*;
import com.itheima.wisdomnext.entity.Result.ResponseResult;
import com.itheima.wisdomnext.service.TopicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

@CrossOrigin // 允许跨域请求
@RestController // 声明这是一个 RESTful 控制器
@RequestMapping("/api/topic") // 设置请求路径前缀为 /api/topic
public class TopicController {

    @Autowired
    private TopicService topicService; // 注入话题服务层

    /**
     * 创建话题
     * @param topic 新创建的话题对象
     * @return 返回操作结果
     */
    @PostMapping("/create")
    public ResponseResult<Object> createTopic(@RequestBody Topic topic) {
        // 调用服务层创建话题
        topicService.createTopic(topic);
        // 返回创建成功的响应
        return ResponseResult.success("创建成功", new HashMap<>());
    }

    /**
     * 获取所有话题
     * @return 返回所有话题的列表
     */
    @GetMapping("/all")
    public ResponseResult<List<Topic>> getAllTopics() {
        // 获取所有话题
        List<Topic> topics = topicService.getAllTopics();
        return ResponseResult.success("查询成功", topics);
    }

    /**
     * 获取单个话题及其关联的帖子
     * @param tid 话题 ID
     * @param id 当前用户 ID（可选）
     * @return 返回指定话题及其帖子的详细信息
     */
    @GetMapping("/{tid}")
    public ResponseResult<Topic> getTopic(@PathVariable Integer tid, @RequestParam(value = "id", required = false) Long id) {
        Topic topic = topicService.getTopicWithPosts(tid, id);
        return ResponseResult.success("查询成功", topic);
    }

    /**
     * 更新话题
     * @param topic 更新后的话题对象
     * @return 返回操作结果
     */
    @PutMapping("/update")
    public ResponseResult<Object> updateTopic(@RequestBody Topic topic) {
        // 调用服务层更新话题
        topicService.updateTopic(topic);
        return ResponseResult.success("更新话题成功", new HashMap<>());
    }

    /**
     * 删除话题
     * @param id 要删除的话题 ID
     * @return 返回操作结果
     */
    @DeleteMapping("/delete/{id}")
    public ResponseResult<Object> deleteTopic(@PathVariable Integer id) {
        // 调用服务层删除话题
        topicService.deleteTopic(id);
        return ResponseResult.success("删除话题成功", new HashMap<>());
    }

    /**
     * 审核话题
     * @param id 需要审核的话题 ID
     * @return 返回操作结果
     */
    @PutMapping("/approve/{id}")
    public ResponseResult<Object> approveTopic(@PathVariable Integer id) {
        // 调用服务层审核话题
        topicService.approveTopic(id);
        return ResponseResult.success("审核话题成功", new HashMap<>());
    }
}
